
// 2
$(function(){
	check();//在这儿执行下面定义的函数方法
	$("#regForm").submit(function(){
		for(var i = 0;i<aEls.length;i++){   //循环原声的集合，aEls	
			if(aEls[i].status === false){ //如果这儿的状态为假，则下面返回的也是false，并且返回前有提示信息
				//显示提示信息
				return false;
			}
			// alert(aEls[i].status);   //验证是否执行到这儿，弹出的应该为fasle
		}
	})
})
// 3、这儿定义一个数组，是用来存储需要提示的信息
var checkForm = {   
	'username':{
		focus:'请填写您的用户名',  //这是获取焦点的时候提醒信息
		empty:'用户名不能为空',
	},
	'code':{
		// preg: /^[a-z0-9]{4}$/i; //正则，不区分大小写
		focus:'请输入验证码',  //这是获取焦点的时候提醒信息
		empty:'验证码不能为空',
		error:'验证码格式错误',
	},
	'message':{
		focus:'请填写短信验证码',  //这是获取焦点的时候提醒信息
		empty:'短信验证不能为空',
	},
	'pwd':{
		// preg:  /^\S{6,32}$/ ,      //验证正则
		focus:'请填写您的密码',  //这是获取焦点的时候提醒信息
		empty:'密码不能为空',
	},
	'pwd_d':{
		focus:'请验证您的密码',  //这是获取焦点的时候提醒信息
		empty:'密码不能为空',
		error:'密码不一致'
	},
}


// 1
var aEls = [];  //将每个需要验证的都给压缩到这儿,(是全局数组)
function check(){
	var aMust = $('#regForm .must');
	// alert(aMust);
	aMust.each(function(){//循环表单里面每一个获取到的数据，并将其压入到aEls数组里面
		// alert(this);
		aEls.push(this);  // 压入到aEls里面
		this.status = false;   //定义一个状态，全都没有通过的
	})

	//这儿是为了获取焦点
	for(var i=0;i<aEls.length;i++){
		aEls[i].onfocus = function(){  //这儿是获取焦点
			var name = this.name;   //获取到该焦点的名字(name值)
			var msg = checkForm[name]['focus'];//获取到上面对应的提示信息,name 是从上一行得到的,他们必须的要相同.接下来的是显示该提示信息，在下面写了一个方法
			showFocus.call(this,msg)//调用显示信息方法
			this.onblur = function(){  //失去焦点的时候校验
				//1、获取到当前表单的值
				var val = this.value;
				//获取的值为空的情况
				if(val == ''){
					var msg = checkForm[name]['empty'];//取得为空的信息提示
					showError.call(this,msg);//调用错误提示方法
					return;  // 为空的话直接返回
				}
				if(name == 'pwd_d'){  //验证两次密码是否一致
					if($('#pwd').val() != val){
						var msg = checkForm[name]['error'];
						showError.call(this,msg);  //显示密码不一致
						return;
					}
				}else{   //验证正则(这儿没有进行正则验证，以后再进行验证)
					
				}

				//这里进行ajax校验
				if($(this).attr('ajax') == 1){  //如果当前有ajax = 1 这个属性的话，就进行ajax校验
					var url = "./index.php?m=Home&c=Reg&a=check";
					var  self = this;
					$.ajax({
						url:url,
						type:'POST',
						data:name +'='+ val,
						dataType:'json',
						success:function(result){
							// alert(result);
							if(result.status === true){ //说明成功
								showSuccess.call(self,'✔');  //在这儿这个this 是不能用了的，得换一种方式
							}else{  //说明失败
								showError.call(self,result.msg); 
							}
						}
					})
				}else{
					//这是成功的显示
					showSuccess.call(this,'✔');
				}
			}
		}
	}
}
// 4、是用于上面的显示获得焦点的
function showFocus(msg){
	// alert(this);//这儿的this是获得的表单项
	// alert(msg);//这儿获取的提示方法
	var parent = $(this).parents('li'); //找到父级的li，并将其赋值给parent里面
	var oPrompt = parent.find('.prompt'); //找到父级的下面的prompt，并将其赋值给oPrompt里面
	oPrompt.html(msg);
}

/**
 * 5、显示错误提示
 */
function showError(msg){
	// alert(msg);
	var parent = $(this).parents('li'); //找到父级的li，并将其赋值给parent里面
	var oPrompt = parent.find('.prompt'); //找到父级的下面的prompt，并将其赋值给oPrompt里面
	oPrompt.html(msg);
	this.status = false;   //失败的时候，改变其状态为假
}

/**
 * 显示成功信息方法
 */
function showSuccess(msg){
	var parent = $(this).parents('li'); //找到父级的li，并将其赋值给parent里面
	var oPrompt = parent.find('.prompt'); //找到父级的下面的prompt，并将其赋值给oPrompt里面
	oPrompt.html(msg);
	this.status = true;//成功的时候，改变其状态为真.
}
